package ip

import (
	"net"
	"strconv"
	"strings"
)

func ValidateIp(ipv4 string) (bool, int) {
	// ParseIP 这个方法 可以用来检查 ip 地址是否正确，如果不正确，该方法返回 nil
	ip := net.ParseIP(ipv4)
	if ip == nil {
		return false, 0
	}
	for i := 0; i < len(ipv4); i++ {
		switch ipv4[i] {
		case '.':
			return true, 4
		case ':':
			return true, 6
		}
	}

	return false, 0

}

// IP可以为单个IP，或者以”/”掩码格式IP段，或者以”-”连接符的IP段
func FormatBlockIps(source []string) ([]string, error) {
	var des = make([]string, 0)
	for _, ip := range source {
		if strings.Contains(ip, "-") {
			startAndEnd := strings.Split(ip, "\\-")
			prefix := strings.Split(startAndEnd[0], "\\.")[:3]
			prefixA := strings.Join(prefix, ".")
			startSuffix, err := strconv.Atoi(strings.Split(startAndEnd[0], "\\.")[3])
			if err != nil {
				return nil, err
			}
			endSuffix, err := strconv.Atoi(strings.Split(startAndEnd[1], "\\.")[3])
			if err != nil {
				return nil, err
			}
			// 10  15
			for i := startSuffix; i <= endSuffix; i++ {
				des = append(des, prefixA+"."+strconv.Itoa(startSuffix))
				startSuffix = startSuffix + 1
			}
		} else {
			des = append(des, ip)
		}
	}
	return des, nil
}
